package strslice

import "encoding/json"

// StrSlice 表示字符串或字符串数组
// StrSlice represents a string or an array of strings
// 我们需要重写json解码器以接受这两个选项
// We need to override the json decoder to accept both options.
type StrSlice []string

// UnmarshalJSON 对字节片进行解码，无论是字符串还是字符串数组。此方法是实现json所必需的。解开器。
// UnmarshalJSON decodes the byte slice whether it's a string or an array of strings.This method is needed to implement json.Unmarshaler.
func (e *StrSlice) UnmarshalJSON(b []byte) error {
	if len(b) == 0 {
		//在没有输入的情况下，我们通过返回nil并保留目标来保留现有值。这允许定义类型的默认值
		// With no input,we preserve the existing value by returning nil and leaving the target alone.This allows defining default values for the type
		return nil
	}
	p := make([]string, 0, 1)
	if err := json.Unmarshal(b, &p); err != nil {
		var s string
		if err := json.Unmarshal(b, &s); err != nil {
			return err
		}
		p = append(p, s)
	}
	*e = p
	return nil
}
